AssetRails ~素材読み込みからAssetBundle作りまで、commandlineで~


概要

AssetStoreへと申請してしました。純粋な個人作では第二弾。


AssetRails

~審査中~

AssetRails-Support & Sample

https://github.com/sassembla/AssetRails-Support#assetrails-overview



使ってみたい人がいたらTwitterで@sassemblaまで連絡をくれ。

実験体になってくれ。



ニーズ

以下がやりたかった/二度とやりたくなかったので作った。

・1~2個とはいえGUIで設定するの面倒くさい

・素材をUnityにインポートするところから圧縮まで、作業のフェーズ分け

・まともさをもった再利用ビリティ

・どこで失敗したかの明示

・途中リソースの利用(このへんドキュメントに書き忘れたな?)

・追加リソースの作成自動化と、過去リソースとのマージ、デプロイ前までの整理


などで、今後盛大に自分のためになってくれると思う。



素材をUnityにインポートするところから圧縮まで、作業のフェーズ分けを行った

Unityでの各種リソースの扱いは、元からかなりラクだと思うんだけど、

反復とか量をさばいたり、またそのファイル変化の種類も多岐にわたるので、


読み込みからの処理を、大きくインポート(import)プレファブリケート(Prefabricate, 組み立て)に分けた。

そこにさらに、AssetBundleや独自処理でのbundle化を行う行程(bundlize)を定義して、

最後にbundle後のファイルをバージョン管理する行程(versioning)を設けてある。


で、それらをcommandlineから個別に実行、反復させることができるようにした。



行程(route)とピッタリなブラウザインターフェース


たとえばimportだと、

コード的に、Unityに素材を読み込んだときに走る処理の内容とかを書きやすく、再利用しやすくした。

具体的には、クラス定義、パラメータ追加がしてあって、こんな感じに書ける。


public class SampleAssetRailsBasedImporter : AssetRails.ImporterBase {


public override void AssetRailsOnPreprocessTexture () {

// Debug.Log("Import:categoryName:" + categoryName);

// Debug.Log("Import:bundleName:" + bundleName);


// run import settings for specific category.

if (categoryName == "characters") {

UnityEditor.TextureImporter importer = assetImporter as UnityEditor.TextureImporter;


importer.textureType = UnityEditor.TextureImporterType.Image;

importer.textureFormat = TextureImporterFormat.ARGB16;

}


if (categoryName == "images") {

UnityEditor.TextureImporter importer = assetImporter as UnityEditor.TextureImporter;


importer.textureType = UnityEditor.TextureImporterType.Advanced;

importer.npotScale = TextureImporterNPOTScale.None;

importer.isReadable = true;

importer.alphaIsTransparency = true;

importer.mipmapEnabled = false;

importer.wrapMode = TextureWrapMode.Repeat;

importer.filterMode = FilterMode.Bilinear;

importer.textureFormat = TextureImporterFormat.ARGB16;

return;

}

}

}


☆categoryName, bundleNameは下の方の「前提」のズを見れば、何されてるかわかると思う。



また、どこまで動いてんだよ的な把握ができるように、Viewを持たせた。

webInterface.png

\\ パーセンテージでわかるの最高やぞ //

('ω' )三('ω')三( 'ω')"



前提

下記のようなフォルダ構造を切った。下記のような構造でファイルを置いておけば、あとはAssetRailsが適当にやってくれる。

overview.png



Unity5と被ったところ

version管理まわりで、versionedList.json ってのを書き出しているが、その内容はUnity5の吐き出すあれとほぼ被った。

ただ、commandline前提で全部組まれたものは見た事無いので、たぶん俺が勝つ(嘘)。



いや~importとかから自動化する前提で組みたいんだよ。なのでGUIでなにかするのはパスだ。

エクセルとかで管理した素材フォルダさえあれば動く、っていうのが理想だと思っているので。


Script動作を排してないので、動作互換あるから、まあつかってみてよって感じ。



圧倒的オリジナリティ

コマンドラインでチマチマ実行してもいいんだけど、

jsontomlで書いたrouteをまとめて実行、っていうのもできる。


こんなかんじの書き方のjsonを実行したりできる。

[

    {

        "clean": {}

    },

    {

        "setup": {

            "--work-platform": "StandaloneOSXIntel"

        }

    },

    {

        "import": {

            "--dryrun": false,

            "--info": true

        }

    },

    {

        "prefabricate": {

            "-i": true

        }

    },

    {

        "bundlize": {

            "-i": true,

            “--actual-size”: true,// compressedでも実際のサイズがわかるようになる感じ

            "--fast": true

        }

    },

    {

        "versioning": {

            "-i": true,

            "--version": 1,

            "--platform": "iPhone",

            "--crc": true

        }

    },

    {

        "versioning": {

            "-i": true,

            "-v": 1,

            "-p": "WebPlayer",

            "-c": false

        }

    },

]

tomlまだexperimentalだけど。


がんばりたくないひとにオススメ。



体験版

そのうち作る。

あ、いいサンプル思いついた。レールの内容固定でlibにしてサンプル作ればいいんだ。

ってこの手は結構使えそうな気がする。